import datetime
import requests
import json
import pyecharts
import pandas as pd
import urllib.parse
from pyecharts import options as opts
from pyecharts.charts import *

def downData(country, url):
    data = requests.get(url).json()
    list = []
    for i in data['data']:
        temp = {
            'country' : country,
            'date' : i['date'],
            'confirm_add' : i['confirm_add'],
            'confirm' : i['confirm'],
            'heal' : i['heal'],
            'dead' : i['dead']
        }
        list.append(temp)

    dataFrame = pd.DataFrame(list)
    dataFrame.to_csv('./countryCSV/%s.csv' % country)

def countryLine(name):
    df_yilang = pd.read_csv('./countryCSV/伊朗.csv')
    df_jianada = pd.read_csv('./countryCSV/加拿大.csv')
    df_deguo = pd.read_csv('./countryCSV/德国.csv')
    df_yidali = pd.read_csv('./countryCSV/意大利.csv')
    df_ribenbentu = pd.read_csv('./countryCSV/日本本土.csv')
    df_faguo = pd.read_csv('./countryCSV/法国.csv')
    df_meiguo = pd.read_csv('./countryCSV/美国.csv')
    df_yingguo = pd.read_csv('./countryCSV/英国.csv')
    df_xibanya = pd.read_csv('./countryCSV/西班牙.csv')
    df_hanguo = pd.read_csv('./countryCSV/韩国.csv')

    #各国统计日期不一样，故统一从2月25日以后开始
    if name == 'confirm':
        lines = (
            Line()
                .add_xaxis([
                x.strftime('%Y-%m-%d') for x in list(pd.date_range(start = '2020-02-25', end = datetime.date.today()))
            ])
                .add_yaxis('伊朗', y_axis = list(df_yilang['confirm'])[6:])
                .add_yaxis('加拿大', list(df_jianada['confirm'])[6:])
                .add_yaxis('德国', list(df_deguo['confirm'])[6:])
                .add_yaxis('意大利', list(df_yidali['confirm'])[6:])
                .add_yaxis('日本', list(df_ribenbentu['confirm'])[6:])
                .add_yaxis('法国', list(df_faguo['confirm'])[6:])
                .add_yaxis('美国', list(df_meiguo['confirm'])[6:])
                .add_yaxis('英国', list(df_yingguo['confirm'])[6:])
                .add_yaxis('西班牙', list(df_xibanya['confirm'])[6:])
                .add_yaxis('韩国', list(df_hanguo['confirm'])[6:])
                .set_global_opts(
                title_opts = opts.TitleOpts(title = '\n各国累计确诊病例趋势折线图'),
                datazoom_opts = opts.DataZoomOpts(
                    is_show = True,#显示
                    is_realtime = True,#拖动时，是否实时更新系列的视图。如果设置为 false，则只在拖拽结束的时候更新。
                    range_end = 60, #数据窗口范围的结束百分比。
                ),
                tooltip_opts = opts.TooltipOpts(
                    is_show = True,
                    trigger = 'axis', #坐标轴触发，主要在柱状图和折线图使用
                    trigger_on = 'mousemove|click', #同时鼠标移动和点击时触发。
                ),
            )
                .render('./templates/各国累计确诊病例趋势折线图.html')
        )
    elif name == 'heal':
        lines = (
            Line()
                .add_xaxis([
                x.strftime('%Y-%m-%d') for x in list(pd.date_range(start = '2020-02-25', end = datetime.date.today()))
            ])
                .add_yaxis('伊朗', y_axis = list(df_yilang['heal'])[6:])
                .add_yaxis('加拿大', list(df_jianada['heal'])[6:])
                .add_yaxis('德国', list(df_deguo['heal'])[6:])
                .add_yaxis('意大利', list(df_yidali['heal'])[6:])
                .add_yaxis('日本', list(df_ribenbentu['heal'])[6:])
                .add_yaxis('法国', list(df_faguo['heal'])[6:])
                .add_yaxis('美国', list(df_meiguo['heal'])[6:])
                .add_yaxis('英国', list(df_yingguo['heal'])[6:])
                .add_yaxis('西班牙', list(df_xibanya['heal'])[6:])
                .add_yaxis('韩国', list(df_hanguo['heal'])[6:])
                .set_global_opts(
                title_opts = opts.TitleOpts(title = '\n各国累计治愈病例趋势折线图'),
                datazoom_opts = opts.DataZoomOpts(
                    is_show = True,#显示
                    is_realtime = True,#拖动时，是否实时更新系列的视图。如果设置为 false，则只在拖拽结束的时候更新。
                    range_end = 60, #数据窗口范围的结束百分比。
                ),
                tooltip_opts = opts.TooltipOpts(
                    is_show = True,
                    trigger = 'axis', #坐标轴触发，主要在柱状图和折线图使用
                    trigger_on = 'mousemove|click', #同时鼠标移动和点击时触发。
                ),
            )
                .render('./templates/各国累计治愈病例趋势折线图.html')
        )
    else:
        lines = (
            Line()
                .add_xaxis([
                x.strftime('%Y-%m-%d') for x in list(pd.date_range(start = '2020-02-25', end = datetime.date.today()))
            ])
                .add_yaxis('伊朗', y_axis = list(df_yilang['dead'])[6:])
                .add_yaxis('加拿大', list(df_jianada['dead'])[6:])
                .add_yaxis('德国', list(df_deguo['dead'])[6:])
                .add_yaxis('意大利', list(df_yidali['dead'])[6:])
                .add_yaxis('日本', list(df_ribenbentu['dead'])[6:])
                .add_yaxis('法国', list(df_faguo['dead'])[6:])
                .add_yaxis('美国', list(df_meiguo['dead'])[6:])
                .add_yaxis('英国', list(df_yingguo['dead'])[6:])
                .add_yaxis('西班牙', list(df_xibanya['dead'])[6:])
                .add_yaxis('韩国', list(df_hanguo['dead'])[6:])
                .set_global_opts(
                title_opts = opts.TitleOpts(title = '\n各国累计死亡病例趋势折线图'),
                datazoom_opts = opts.DataZoomOpts(
                    is_show = True,#显示
                    is_realtime = True,#拖动时，是否实时更新系列的视图。如果设置为 false，则只在拖拽结束的时候更新。
                    range_end = 60, #数据窗口范围的结束百分比。
                ),
                tooltip_opts = opts.TooltipOpts(
                    is_show = True,
                    trigger = 'axis', #坐标轴触发，主要在柱状图和折线图使用
                    trigger_on = 'mousemove|click', #同时鼠标移动和点击时触发。
                ),
            )
                .render('./templates/各国累计死亡病例趋势折线图.html')
        )




def countryLineLog(name):
    df_yilang = pd.read_csv('./countryCSV/伊朗.csv')
    df_jianada = pd.read_csv('./countryCSV/加拿大.csv')
    df_deguo = pd.read_csv('./countryCSV/德国.csv')
    df_yidali = pd.read_csv('./countryCSV/意大利.csv')
    df_ribenbentu = pd.read_csv('./countryCSV/日本本土.csv')
    df_faguo = pd.read_csv('./countryCSV/法国.csv')
    df_meiguo = pd.read_csv('./countryCSV/美国.csv')
    df_yingguo = pd.read_csv('./countryCSV/英国.csv')
    df_xibanya = pd.read_csv('./countryCSV/西班牙.csv')
    df_hanguo = pd.read_csv('./countryCSV/韩国.csv')

    #各国统计日期不一样，故统一从2月25日以后开始
    if name == 'confirm':
        lines = (
            Line()
                .add_xaxis([
                x.strftime('%Y-%m-%d') for x in list(pd.date_range(start = '2020-02-25', end = datetime.date.today()))
            ])
                .add_yaxis('伊朗', y_axis = list(df_yilang['confirm'])[6:])
                .add_yaxis('加拿大', list(df_jianada['confirm'])[6:])
                .add_yaxis('德国', list(df_deguo['confirm'])[6:])
                .add_yaxis('意大利', list(df_yidali['confirm'])[6:])
                .add_yaxis('日本', list(df_ribenbentu['confirm'])[6:])
                .add_yaxis('法国', list(df_faguo['confirm'])[6:])
                .add_yaxis('美国', list(df_meiguo['confirm'])[6:])
                .add_yaxis('英国', list(df_yingguo['confirm'])[6:])
                .add_yaxis('西班牙', list(df_xibanya['confirm'])[6:])
                .add_yaxis('韩国', list(df_hanguo['confirm'])[6:])
                .set_global_opts(
                title_opts = opts.TitleOpts(title = '\n各国累计确诊病例趋势折线图(对数)'),
                datazoom_opts = opts.DataZoomOpts(
                    is_show = True,#显示
                    is_realtime = True,#拖动时，是否实时更新系列的视图。如果设置为 false，则只在拖拽结束的时候更新。
                    range_end = 60, #数据窗口范围的结束百分比。
                ),
                tooltip_opts = opts.TooltipOpts(
                    is_show = True,
                    trigger = 'axis', #坐标轴触发，主要在柱状图和折线图使用
                    trigger_on = 'mousemove|click', #同时鼠标移动和点击时触发。
                ),
                yaxis_opts = opts.AxisOpts(
                    type_ = 'log',
                    max_ = 'max'
                )
            )
                .render('./templates/各国累计确诊病例趋势折线图(对数).html')
        )
    elif name == 'heal':
        lines = (
            Line()
                .add_xaxis([
                x.strftime('%Y-%m-%d') for x in list(pd.date_range(start = '2020-02-25', end = datetime.date.today()))
            ])
                .add_yaxis('伊朗', y_axis = list(df_yilang['heal'])[6:])
                .add_yaxis('加拿大', list(df_jianada['heal'])[6:])
                .add_yaxis('德国', list(df_deguo['heal'])[6:])
                .add_yaxis('意大利', list(df_yidali['heal'])[6:])
                .add_yaxis('日本', list(df_ribenbentu['heal'])[6:])
                .add_yaxis('法国', list(df_faguo['heal'])[6:])
                .add_yaxis('美国', list(df_meiguo['heal'])[6:])
                .add_yaxis('英国', list(df_yingguo['heal'])[6:])
                .add_yaxis('西班牙', list(df_xibanya['heal'])[6:])
                .add_yaxis('韩国', list(df_hanguo['heal'])[6:])
                .set_global_opts(
                title_opts = opts.TitleOpts(title = '\n各国累计治愈病例趋势折线图(对数)'),
                datazoom_opts = opts.DataZoomOpts(
                    is_show = True,#显示
                    is_realtime = True,#拖动时，是否实时更新系列的视图。如果设置为 false，则只在拖拽结束的时候更新。
                    range_end = 60, #数据窗口范围的结束百分比。
                ),
                tooltip_opts = opts.TooltipOpts(
                    is_show = True,
                    trigger = 'axis', #坐标轴触发，主要在柱状图和折线图使用
                    trigger_on = 'mousemove|click', #同时鼠标移动和点击时触发。
                ),
                yaxis_opts = opts.AxisOpts(
                    type_ = 'log',
                    max_ = 'max'
                )
            )
                .render('./templates/各国累计治愈病例趋势折线图(对数).html')
        )
    else:
        lines = (
            Line()
                .add_xaxis([
                x.strftime('%Y-%m-%d') for x in list(pd.date_range(start = '2020-02-25', end = datetime.date.today()))
            ])
                .add_yaxis('伊朗', y_axis = list(df_yilang['dead'])[6:])
                .add_yaxis('加拿大', list(df_jianada['dead'])[6:])
                .add_yaxis('德国', list(df_deguo['dead'])[6:])
                .add_yaxis('意大利', list(df_yidali['dead'])[6:])
                .add_yaxis('日本', list(df_ribenbentu['dead'])[6:])
                .add_yaxis('法国', list(df_faguo['dead'])[6:])
                .add_yaxis('美国', list(df_meiguo['dead'])[6:])
                .add_yaxis('英国', list(df_yingguo['dead'])[6:])
                .add_yaxis('西班牙', list(df_xibanya['dead'])[6:])
                .add_yaxis('韩国', list(df_hanguo['dead'])[6:])
                .set_global_opts(
                title_opts = opts.TitleOpts(title = '\n各国累计死亡病例趋势折线图(对数)'),
                datazoom_opts = opts.DataZoomOpts(
                    is_show = True,#显示
                    is_realtime = True,#拖动时，是否实时更新系列的视图。如果设置为 false，则只在拖拽结束的时候更新。
                    range_end = 60, #数据窗口范围的结束百分比。
                ),
                tooltip_opts = opts.TooltipOpts(
                    is_show = True,
                    trigger = 'axis', #坐标轴触发，主要在柱状图和折线图使用
                    trigger_on = 'mousemove|click', #同时鼠标移动和点击时触发。
                ),
                yaxis_opts = opts.AxisOpts(
                    type_ = 'log',
                    max_ = 'max'
                )
            )
                .render('./templates/各国累计死亡病例趋势折线图(对数).html')
        )

def main(name, type):
    url = 'https://api.inews.qq.com/newsqa/v1/automation/foreign/daily/list?country='
    countryList =['意大利','伊朗','西班牙','美国','德国','英国','法国','日本本土','加拿大','韩国']
    for i in countryList:
        # print(i)
        s = urllib.parse.quote(i) # urlencode
        urls = url + s + '&'
        # print(i,urls)
        downData(i,urls)

        if type == 'log':
            countryLineLog(name)
        else:
            countryLine(name)


if __name__ == '__main__':
    main(name = 'confirm', type = 'value')
    main(name = 'heal', type = 'value')
    main(name = 'dead', type = 'value')
    main(name = 'confirm', type = 'log')
    main(name = 'heal', type = 'log')
    main(name = 'dead', type = 'log')